#include "structs.h"
OUTPUT DinhThoi_SJF(INPUT input){
	OUTPUT output;
	int size = input.soProcess; 

	int chon=0, lanthuchien=0, lanthu=0;
	
	int i,j,k,l;
	int end = 0; 
	for (i=0 ; i <size ; i++)
	{ 
		output.wtime[i]=0; 
	}
	for ( ; end == 0 ; )
	{ 
		end = 1;
		for (i=0 ; i <size ; i++)
		{ 
			if (input.pro[i].thoiGianXuLy !=0) end = 0 ; 
		} 
		if (end == 1 ) break; 
		if (input.pro[chon].thoiGianXuLy == 0 || input.pro[chon].thoiDiemVaoHT > lanthuchien) 
		{ 

			for (j=0 ; j<size ; j++) 
			{ 
				if (input.pro[j].thoiGianXuLy != 0)
					if(input.pro[j].thoiDiemVaoRQ+input.pro[j].thoiDiemVaoHT <= lanthuchien)
					{ 
						chon = j; break; 
					} 
			} 
			while(input.pro[chon].thoiGianXuLy == 0 || (input.pro[chon].thoiDiemVaoHT + input.pro[chon].thoiDiemVaoRQ) > lanthuchien)
			{
				lanthuchien ++;
				for (l=0 ; l <size ; l++) 
				{
					if (input.pro[l].thoiGianXuLy !=0) 
						if (input.pro[l].thoiDiemVaoHT <= lanthuchien)
							output.wtime[l]++;  
				}
				for (j=0 ; j<size ; j++) 
				{ 
					if (input.pro[j].thoiGianXuLy != 0 && input.pro[j].thoiDiemVaoRQ+input.pro[j].thoiDiemVaoHT <= lanthuchien) 
					{ 
						chon = j; break; 
					} 
				}
			}
		}
		for (k=0 ; k<size ; k++)
		{ 
			if (input.pro[k].thoiDiemVaoRQ+input.pro[k].thoiDiemVaoHT <= lanthuchien) 
					if (input.pro[k].thoiGianXuLy != 0) 
						if (input.pro[k].thoiGianXuLy <= input.pro[chon].thoiGianXuLy) 
							chon = k; 
		} 
		input.pro[chon].thoiGianXuLy--;
		output.sche[lanthu] = input.pro[chon].tenProcess; 
		lanthu++;lanthuchien ++; 
		for( l=0 ; l <size ; l++) 
		{
			if (l != chon) 
				if (input.pro[l].thoiGianXuLy !=0) 
					if (input.pro[l].thoiDiemVaoHT <= lanthuchien) 
						output.wtime[l]++; 
		} 
	}
	output.avgtime=0.0;
	for (i=0 ; i <size ; i++ ) 
	{ 
		output.avgtime += (float)output.wtime[i]; 
	} 
	output.avgtime = output.avgtime / (float) size ;
	output.ns=lanthu; 
	output.nw=size;

	return output;
}
